package com.hspedu.innerclass;

public class MemberInnerClass {
    public static void main(String[] args) {
        Outer04 outer04 = new Outer04();
        outer04.t1();
        //n1=10 name=张三

        //外部其它类，使用成员内部类的方法
        //方式一：用外部类的对象去new一个成员内部类;
        //      相当于把new Inner08()当做outer04的成员
        Outer04.Inner08 inner08 = outer04.new Inner08();//这就是个语法
        inner08.say();

        //方式二：在外部类中编写一个方法，可以返回成员内部类inner08的实例
        Outer04.Inner08 inner081 = outer04.getInner08Instance();
        inner081.say();

        //方式三：
        new Outer04().new Inner08();
    }
}

class Outer04{//外部类
    private int n1 = 10;
    public String name = "张三";

    public void hi(){
        System.out.println("hi"
        );
    }

    //注意成员内部类是定义在外部类的成员位置上。
    //可以添加任意的访问修饰符（public，protected，默认，private）
    class Inner08 {//成员内部类
        private double sal = 88.8;
        //作用域：外部类都可以使用这个成员内部类
        public void say(){
            //可以直接访问外部类的所有成员，包括私有的
            System.out.println("n1=" + n1 + " name=" + name);
            hi();
        }
    }

    //该方法返回一个成员内部类的实例
    public Inner08 getInner08Instance(){
        Inner08 inner08 = new Inner08();
        return inner08;
    }
    //写一个方法
    public void t1(){
        //使用成员内部类
        //外部类 要使用 成员内部类，要创建成员内部类的对象，然后调用相关的属性或/方法
        Inner08 inner08 = new Inner08();
        inner08.say();
        System.out.println(inner08.sal);
    }
}

